\chapter{径迹示踪和物理过程}
\thispagestyle{empty}
\section{径迹示踪}
\subsection{基础概念}
\subsubsection{径迹示踪体系}
所有包含例子输运的GEANT4过程都按类别区分。就“径迹示踪“的名称而言，在径迹示踪的类别内，没有粒子输运。G4TrackingManager是一个交互类，这个类可以链接交互事件、径迹和径迹示踪类别。这个类的一个实例是在示踪类别中，处理上层对象，即事件管理与下层对象之间的信息交互。事件管理是G4EventManager类的单例实例。

径迹示踪管理从事件管理接收到一个径迹，并执行一些列行为来完成示径迹示踪。G4TrackingManager 整合指针到G4SteppingManager、G4Trajectory和G4UserTrackingAction。同时，也会“使用”G4Track和G4Setp。

G4SteppingManager在粒子的径迹示踪过程中很重要，它关注所有通过 与粒子输运（例如，体积和物质的相互反应）相关的不同类别物体间的信息。它的公共方法Stepping()控制粒子的步进信息。下面说明执行单步的过程：
\begin{enumerate}
\item 如果粒子静止（例如，零动能状态），每一个处于活动状态的AtReset过程提同时供了一个基于它描述互相作用的步长。这个过程将引用描述的最小步长。
\item 每一个处于活动离散或连续的过程必须提供基于它描述互相作用的步长。并且所描述的步长都是最小值。
\item 体积导航模块计算出“安全距离”，这个安全指于相邻体积边界的距离。如果过程中最小的物理步长小于“安全距离”，那么物理步长将会自动更替为更长一级的步长。在这种情况下，公共方法Stepping()将不会执行近一步的体积计算。
\item 如果过程中最小的物理步长大于“安全距离”，那么与相邻边界的距离会重新计算。
\item 公共方法Stepping()将采用更小或者最小的物理步长与体积步长。
\item 公共方法Stepping()引用所有的处于活动状态的连续过程，需要注意的是：所有的引用的过程执行完毕后，粒子的动能才会更新。动能的变化是这些每个过程动能变化的总和。
\item 在引用离散过程之前，当前的径迹特征被更新，同时，过程中产生的次级粒子保存在SecondaryList里。更新的特征包含：
\begin{itemize}
  \item 当前的径迹粒子的动能（注释“sunEnergyChange”是每一个过程前后能量变化的总和）
  \item 位置和时间（译者认为是两者是一一对应的，应指的是某个时间粒子的位置）
\end{itemize}
\item 在连续的过程中，可以查看粒子的动能是否满足粒子终止的条件,如果粒子的动能降低为零，条件合适，下一步骤将会应用AtRest过程。
\item 引用离散的过程，在调用此过程后。
\begin{itemize}
  \item 当前粒子径迹的能量，位置和时间将会更新，同时
  \item 次级粒子相关的数据保存在SecondaryList里。
\end{itemize}
\item 在离散过程中，可以查看粒子的动能是否满足粒子终止的条件
\item "安全距离"更新
\item 如果体积边界限制步长，将会使粒子进入相邻的体积内。
\item 运行碰撞信息。
\item 调用用户介入类G4UserSteppingAction。
\item 保存数据到粒子轨迹。
\item 更新离散过程的平均自由程。
\item 如果母代粒子未消失，重新设定已经发生的离散过程的最大相互作用距离。
\item 完成单步过程。
\end{enumerate}


\subsubsection{过程是什么？}
只有过程可以改变G4Track的信息、通过ParticleChage增加并保存次级粒子的径迹数据。G4VProcess是所有过程的一个基础类，它包含三种DoIt和GetPhysicalInteraction方法，它用于总体地描述相互作用。如果用户想要修改G4Track的信息，他\textbf{应该}新建一个特殊的过程，并且为粒子注册过程。
\subsubsection{径迹是什么？}
G4Track保存|当前|的粒子信息。（例如，能量，运动，位置，时间等等），同时也保存“静态”信息（例如，质量，电性，生命周期等等）。需要注意的是，当 调用AlongStepDoIts进行某一单步操作时，G4Track在单步开始时候保存信息。在完成所有的AlongStepDoIt时，G4Track会更新信息。另一方面，在一次远程调用PostStepDoIt之后，G4Track会更新信息。
\subsubsection{单步是什么？}
G4Step保存单步的临时信息。这些信息包含单步的开始与结束时的数据，PreStepPoint和PostStepPoint，这两个点包含了点的坐标轴和含有点的体积。G4Setp也保存两点之间径迹特性的变化。这些特性如能量，运动将将会与一些活动的过程同时调用。
\subsubsection{ParticleChange是什么？}
在DoIt反应过程不会直接改变任何G4Track的信息。但是，这些过程会提出新的更改作为使用ParticleChange相互作用的结果，在每一次DoIt之后，ParticleChange基于提出的更改而更新PostStepPoint，然后，在完成所有的AlongStepDoIts与每一个PostStepDoIt之后，G4Track会更新信息。

\subsection{获取径迹与单步信息}
\subsubsection{如何获取径迹信息}
通过调用G4Track类提供的一些Get方法来获取径迹信息。详细信息参见包含在\$G4INCLUDE内的头文件\href{http://www-geant4.kek.jp/lxr/source//track/include/G4Track.hh}{G4Track.hh}
，典型的可获取信息如下：
\begin{itemize}
  \item (x,y,z)坐标
  \item 全局时间（从新建事件开始计时）
  \item 局部时间（从新建径迹开始计时）
  \item 本征时间（在剩余的框架内，从径迹开始计时）
  \item 运动方向（单位向量）
  \item 动能
  \item 累积体积径迹长度
  \item 累积真实径迹长度
  \item 动态粒子指针
  \item 物理体积指针
  \item Track ID号
  \item 母代径迹ID号
  \item 当前单步号
  \item 径迹状态
  \item 径迹开始点（顶点位置）的(x,y,z)坐标
  \item 径迹开始点（顶点位置）的运动方向
  \item 径迹开始点（顶点位置）的动能
  \item 新建当前径迹过程的指针
\end{itemize}

\subsubsection{如何获取单步信息}
通过调用G4Setp/G4StepPoint类的一些Get方法来获取单步和单步点位信息。
\href{http://www-geant4.kek.jp/lxr/source//track/include/G4Step.hh}{G4Setp}，典型可获取信息包含如下：
\begin{itemize}
  \item PreStep和PostStepPoint的指针
  \item 体积单步步长（在多次散射修正之前的单步步长）
  \item 真是单步步长（在多次散射修正之后的单步步长）
  \item PreStepPoint到PostStepPoint的位置和时间增加量
  \item PreStepPoint到PostStepPoint的运动和能量的增加量（注意：为获取单步的能量沉积，不能使用“变化能量”，必须如下的使用“总能量沉积”）
  \item G4Track的指针
  \item 在单步内的总能量沉积
      \begin{itemize}
        \item 由于能量损失而引起的能量沉积，和
        \item 因为能量低于反应界面阈值而没有产生产生次级粒子所损失的能量
      \end{itemize}
  \item 在单步内非电离而产生能量沉积
  \item 在当前径迹示踪中产生的次级粒子的径迹
      \begin{itemize}
        \item 注意：不仅仅包含\textbf{当前}单步中产生的次级粒子，所有的次级粒子的信息都包含。
      \end{itemize}
\end{itemize}

\subsubsection{如何获取”粒子变更“}
通过调用G4ParticleChange类的一些Get方法来获取粒子变更信息。
\hyperref{http://www-geant4.kek.jp/lxr/source//track/include/G4ParticleChange.hh}{G4ParticleChange},典型可获取信息包含如下：
\begin{itemize}
  \item 母代粒子的最终运动方向
  \item 母代粒子的最终动能
  \item 母代粒子的最终位置
  \item 母代粒子的最终全局时间
  \item 母代粒子的最终本征时间
  \item 母代粒子的最终极性
  \item 母代粒子的状态（G4TrackStatus）
  \item 真实单步步长（这个被多次散射来射用，用于存储从体积步长到真实步长的变化结果）
  \item 局部能量沉积，这包含
      \begin{itemize}
        \item 能量损失过程引起的能量沉积，或
        \item 因为能量低于反应界面阈值而没有产生产生次级粒子所损失的能量
      \end{itemize}
  \item 次级粒子的数量
  \item 次级粒子的列表（G4Track列表）
\end{itemize}

\subsection{次级粒子的控制}
从物理过程到径迹示踪，通过一些G4Track来控制次级粒子。G4ParticleChange提供如下四种物理过程的方法：
\begin{itemize}
  \item AddSecondary( G4Track * aSecondary )
  \item AddSecondary( G4DynamicParticle * aSecondary )
  \item AddSecondary( G4DynamicParticle * aSecondary, G4ThreeVector position )
  \item AddSecondary( G4DynamicParticle * aSecondary, G4double time)
\end{itemize}
此外，G4track的构建的方法是使用本文中给出的信息。
\subsection{用户行为}
程序中有两个类允许用户接入粒子示踪，他们是：
\begin{itemize}
  \item G4UserTrackingAction,和
  \item G4UserSteppingAction
\end{itemize}
上述的两个类都提供用户在粒子示踪的特殊点位链接Geant4内核。

\begin{center}
\begin{tabular}{p{14.5cm}}
\specialrule{0.02em}{1pt}{1pt}
\textbf{注意：}用户\textbf{不应该}（和不能）在UserSteppingAction更改G4Track。唯一例外的是TrackStatus。\\
\specialrule{0.02em}{1pt}{1pt}
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{p{14.5cm}}
\specialrule{0.02em}{1pt}{1pt}
\textbf{注意：}用户在用户行为中在执行非正常/非物理类时必须要小心。更多详情参见\hyperref[Killing Tracks in User Actions and Energy Conservation ]{Killing Tracks in User Actions and Energy Conservation \textcolor{red}{这个地方需要一个label} }\\
\specialrule{0.02em}{1pt}{1pt}
\end{tabular}
\end{center}

\subsection{冗余输出}
冗余输出信息标志位置可以打开或关闭，打印的有关径迹/单步的信息总量，以及信息内容的复杂程度，可以通过冗余标志位的值来控制，例如：
\begin{lstlisting}[numbers=none]
G4UImanager * UI = G4UImanager::GetUIpointer();
UI->ApplyCommand("/tracking/verbose 1");
\end{lstlisting}

\subsection{轨迹与轨迹点}
\subsubsection{G4Trajectory和G4TrajectoryPoint}
G4Trajectory和G4TrajectoryPoint是GEANT4中提供的可继承实体类，这两个类分别继承于 G4VTrajectory和G4VTrajectoryPoint基类。当G4Track在G4EventManager传递时，G4Trajectory类对象由G4TrackingManager新建。
G4Trajectory 有如下数据成员：
\begin{itemize}
  \item 母代径迹与径迹的ID号
  \item 粒子名称，电性和PDG码
  \item G4TrajectoryPoint指针的集合
\end{itemize}
G4TrajectoryPoint相当与一个单步点，这个点沿着径迹之后的路径。粒子的位置由G4ThreeVectorIts给出。一个G4TrajectoryPoint类对象由G4Trajectory中的 AppendStep()方法新建，在单步的最后，G4TrackingManager调用AppendStep()这个方法。G4Trajectory创建时后同时创建第一个点，因此，第一个点是初始的顶点。
轨迹的新建可以通过调用G4TrackingManager::SetStoreTrajectory(G4bool)来控制。 UI命令/tracking/storeTrajectory \_bool\_拥有相同功能。用户可以设置在它的G4UserTrackingAction::PreUserTrackingAction()方法中对于每个单据的径迹设置标志位。

\begin{center}
\begin{tabular}{p{14.5cm}}
\specialrule{0.02em}{1pt}{1pt}
\textbf{注意：}用户不因该在反应中为次级粒子新建轨迹，因为这会占用大量的内存。\\
\specialrule{0.02em}{1pt}{1pt}
\end{tabular}
\end{center}
在一个事件中所有的被创造的轨迹都保存在G4TrajectoryContainer类对象中，这个对象将会被保存在G4Event中。
为了描绘或者打印出一个事件中产生的轨迹，用户可能会从他们相对的G4UserEventAction::EndOfEventAction()调用G4VTrajectory中的DrawTrajectory()或ShowTrajectory()方法。体积描绘必须在轨迹描绘之前，基于粒子的电性描绘轨迹的颜色：
\begin{itemize}
  \item 负电性：红色
  \item 中性：绿色
  \item 正电性：蓝色
\end{itemize}

\begin{center}
\begin{tabular}{p{14.5cm}}
\specialrule{0.02em}{1pt}{1pt}
\textbf{注意：}由于G4Navigator的修改，只要轨道没有闯过体积边界，在不被分解为更小的单步的情况下，径迹可以执行超过一轮轨道径迹，因此描绘的轨迹可能不是一个圆环。\\
\specialrule{0.02em}{1pt}{1pt}
\end{tabular}
\end{center}

\subsubsection{定制轨迹和轨迹点}
G4Track和G4Step是迁移类；他们在事件的结尾是无效的。因此可继承实体类G4VTrajectory和G4VTrajectoryPoint是用户可以使用的对于事件结尾分析或者从头到尾分析的几个唯一的类。就像上文中提到的，GEANT4提供的默认的类仅仅有很少的数量，例如，G4Trajectory和G4TrajectoryPoint。用户可以通过从相对的基类直接继承来定制他们自己的轨迹和轨迹点类。

为了使用定制轨迹，用户必须在G4UserTrackingAction::PreUserTrackingAction()方法中构建一个实体轨迹类对象，并且通过使用SetTrajectory()方法将构建的实体类对象的指针传递到G4TrackingManager。必须在A用户可执行的轨迹类AppendStep()方法中构建定制的轨迹点类对象。这个AppendStep()需要通过G4TrackingManager调用。

为了定制用户轨迹描述。用户可以在他们自己的轨迹类里使用DrawTrajectory()。

当一个用户版的G4Trajectory生命一些新的类变量，必须为这个新变量分配内存于释放内存。检查分配内存的配额大小与 sizeof(G4Trajectory)是有用的。因为没有分配内存与释放内存，所以这两点不会在G4VTrajectory里应用。

\section{物理过程}
\subsection{概述}
物理过程描述了粒子如何与物质相互作用。GEANT4提供7个主要的反应过程分类：
\begin{enumerate}
  \item electromagnetic（电磁相互作用过程，标准的和低能的）
  \item hadronic（强子相互作用过程，纯强子，辐射率表，光电-核）
  \item decay（衰变过程）
  \item photolepton-hadron（光青紫与强子的相互作用过程）
  \item optical（光学的光子过程）
  \item parameterization（参数化过程，即fast simulation）
  \item transportation（输运过程）
\end{enumerate}

在GEANT4程序的设计中，物理过程中的范化和抽象化是关键因素。从径迹示踪的观点上看，所有的物理过程都以相同的方式处理。GEANT4方法允许任何人新建物理过程并为某个粒子类型设计物理过程。这种开源设计允许个人或者用户为了创新、领域特性的或者用户定制的目的新建物理过程。

每个物理过程有两组方法，这些方法在径迹示踪中扮演重要的角色，例如GetPhysicalInteractionLength (GPIL)和DoIt。GPIL方法给出从当前的空间-时间点到下一个相邻的空间-时间点的单步步长。它基于物理过程的反应截面来计算相互作用的可能性。在GPIL的最后，调用DoIt方法。DoIt方法执行相互作用的具体细节，改变粒子的能量，运动，方向和位置，如果条件合适，这个方法可以产生次级径迹。这些改变的数据保存在G4VParticleChange对象中（见\hyperref[Particle change]{Particle change\textcolor{red}{这里需要一个label}}）。

\subsubsection{G4VProcess}
G4VProcess是所有的物理过程的一个基础类。每一个物理过程必须执行G4VProcess的虚拟方法，这个虚拟方法描述了相互作用（DoIt），决定了相互作用发生的的时间（GPIL）。为了满足多用类型的相互作用方式，G4VProcess提供了三种DoIt方法：
\begin{itemize}
  \item G4VParticleChange * AlongStepDoIt( const G4Track\& track, const G4Step\&stepData )
  \item[ ]当G4SteppingManager输运一个粒子通过单步时，调用这个方法。忽略物理过程中产生得最小单步步长，与每一个确定的物理过程相对应得AlongStepDoIt应用在每一个单步。每一个径迹信息得改变都记录并累积在G4Step中。在所用的物理过程都被调用过这个类之后，因为AlongStepDoIt产生的变化都被记录在G4Track中，这些变化包含粒子的重定位与安全距离的更新。注意，在所有的AlongStepDoIt远程调用之后，如果单步被限制在体积的边界，G4Track对象的终点竟会在一个新的体积中。为了获得上一个旧体积的信息，必须链接G4Step，因为G4Step包含两个终点的信息。
  \item G4VParticleChange * PostStepDoIt( const G4Track\& track, const G4Step\&stepData )
  \item[]只有它的物理过程已经产生了最小单步步长，或者物理过程已经发生，这个方法在单步的终点才会被调用。在每次PostStepDoIt，AlongStepDoIt方法远程调用之后，G4Track将会更新。
  \item  G4VParticleChange * AtRestDoIt( const G4Track\& track, const G4Step\&stepData )
  \item[ ]只有它的物理过程已产生了最小单步步长，或者物理过程已经发生，这个方法调用仅仅是用于粒子停止。
\end{itemize}
对于上述的每一个DoIt方法，G4VProcess提供了相符合的纯虚GPIL方法：
\begin{itemize}
  \item  G4double PostStepGetPhysicalInteractionLength( const G4Track\& track,G4double previousStepSize, G4ForceCondition * condition )
  \item[ ]这个方法产生他们的物理过程允许的单步步长，也提供一个标志位，在不考虑单步步长的前提下，来强制互相作用发生。
  \item G4double AlongStepGetPhysicalInteractionLength( const G4Track\& track,G4double previousStepSize, G4double currentMinimumStep, G4double\&proposedSafety, G4GPILSelection * selection )
  \item[ ]这个方法产生他们的物理过程允许的单步步长。
  \item G4double AtRestGetPhysicalInteractionLength( const G4Track\& track,G4ForceCondition * condition )
  \item[ ]这个方法产生他们的物理过程允许的单步步长，也提供一个标志位，在不考虑单步步长的前提下，来强制互相作用发生。
\end{itemize}
G4VProcess中的其他纯虚方法如下：
\begin{itemize}
  \item virtual G4bool IsApplicable(const G4ParticleDefinition\&)
  \item [ ]如果物理过程对象适合粒子类型，则返回true。
  \item virtual void PreparePhysicsTable(const G4ParticleDefinition\&)，和
  \item virtual void BuildPhysicsTable(const G4ParticleDefinition\&)
  \item [ ]由过程管理器给上述两个纯虚方法传递信息，无论何时改变的截断半径值，反应界面列表应该准备和重建。如果物理过程不受到截断半径值的影响，这个方法不是强制性的。
  \item virtual void StartTracking()和
  \item virtual void EndTracking()
  \item 由径迹示踪管理器在当前径迹示踪的开始与结束时，给上述两个纯虚方法传递信息。
\end{itemize}

\subsubsection{物理过程的其他基础类}
特殊的物理过程可能都继承与其他七个附加的虚拟基础类，这个些虚拟基础类继承于G4VProcess。他们其中的三种被用过简单的物理过程：
\paragraph{G4VRestProcess}物理过程仅仅使用AtRestDoIt方法。

例如：中子捕获
\paragraph{G4VDiscreteProcess}物理过程仅仅使用PostStepDoIt方法。

例如：康普顿散射，强子非弹性互相作用。

\noindent 剩下的四个类为了更复杂的物理过程提供：
\paragraph{G4VContinuousDiscreteProcess}物理过程使用AtRestDoIt和PostStepDoIt方法。

例如：粒子输运，电离（能量损失和delta射线）
\paragraph{G4VRestDiscreteProcess}

例如：正电子湮灭，衰变（在飞行于静止状态）
\paragraph{G4VRestContinuousProcess}物理过程使用AtRestDoIt和PostStepDoIt方法。
\paragraph{G4VRestContinuousDiscreteProcess}物理过程使用AtRestDoIt、AlongStepDoIt和PostStepDoIt方法。

\subsubsection{粒子改变}
G4VParticleChange和它的派生类用于存储径迹的最终状态信息，这些信息包含次级粒子径迹，此径迹由DoIt方法产生。G4VParticleChange实例是是唯一的对象，这个对象的信息由物理过程更新，因此，G4VParticleChange也负责更新单步。stepping管理器集合次级粒子的径迹，仅通过粒子改变发送请求来更新G4Step。

G4VParticleChange是一个抽象类。它包含一个最小套的方法用于更新G4Step于控制次级粒子。因此，一个物理过程可以通过继承G4VParticleChange来定义他自己的粒子改变。提供三种纯虚方法如下：
\begin{itemize}
  \item virtual G4Step * UpdateStepForAtRest( G4Step * step) ,
  \item virtual G4Step * UpdateStepForAlongStep( G4Step * step ), 和
  \item virtual G4Step * UpdateStepForPostStep( G4Step * step),
\end{itemize}
这些纯虚方法与G4VProcess中的三种DoIt方法相符合，每一种继承类应该执行这些方法。

\subsection{电磁反应}
本章节总结了GEANT4中的电磁（EM）反应的物理过程。更详细的电磁信息见（EM）\pageref{}\textcolor{red}{页}。为获取执行这些物理过程的详细信息，可以参照\href{http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/PhysicsReferenceManual/fo/PhysicsReferenceManual.pdf}{Physics Reference Manual}。

为了使用电磁物理过程，一些数据文件是必须的。用户应该设置环境变量G4LEDATA路径到这些目录下。这些文件与GEANT4一起发布在网站上，可以通过GEANT4下载页面获得。对于GEANT4 version 10.3， G4EMLOW6.50数据是必须的。
\subsubsection{电磁物理过程}
下列是GEANT4中关于电磁物理过程的总结
\begin{itemize}
\item 光子过程
    \begin{itemize}
      \item Gamma conversion (also called pair production, class name G4GammaConversion)
      \item Photo-electric effect (class name G4PhotoElectricEffect)
      \item Compton scattering (class name G4ComptonScattering)
      \item Rayleigh scattering (class name G4RayleighScattering)
      \item Rayleigh scattering (class name G4RayleighScattering)
      \item Muon pair production (class name G4GammaConversionToMuons)
    \end{itemize}
\item 电子/正电子过程
    \begin{itemize}
      \item Ionisation and delta ray production (class name G4eIonisation)
      \item Bremsstrahlung (class name G4eBremsstrahlung)
      \item e+e- pair production (class name G4ePairProduction)
      \item Multiple scattering (class name G4eMultipleScattering)
      \item Positron annihilation into two gammas (class name G4eplusAnnihilation)
      \item Positron annihilation into two muons (class name G4AnnihiToMuPair)
      \item Positron annihilation into hadrons (class name G4eeToHadrons)
    \end{itemize}
\item Muon 介子过程
    \begin{itemize}
      \item Ionisation and delta ray production (class name G4MuIonisation)
      \item Bremsstrahlung (class name G4MuBremsstrahlung)
      \item e+e- pair production (class name G4MuPairProduction)
      \item Multiple scattering (class name G4MuMultipleScattering)
    \end{itemize}
\item 强子/离子过程
    \begin{itemize}
      \item Ionisation (class name G4hIonisation)
      \item Ionisation for ions (class name G4ionIonisation)
      \item Ionisation for heavy exotic particles (class name G4hhIonisation)
      \item Ionisation for classical magnetic monopole (class name G4mplIonisation)
      \item Multiple scattering (class name G4hMultipleScattering)
      \item Bremsstrahlung (class name G4hBremsstrahlung)
      \item e+e- pair production (class name G4hPairProduction)
    \end{itemize}
\item  库伦散射过程
    \begin{itemize}
      \item Alternative process for simulation of single Coulomb scattering of all charged particles (class name G4CoulombScattering)
      \item Alternative process for simulation of single Coulomb scattering of ions (class name G4ScreenedNuclearRecoil)
    \end{itemize}
\item 极性电子或者伽马射线物理过程模拟
    \begin{itemize}
      \item Compton scattering of circularly polarized gamma beam on polarized target (class nameG4PolarizedCompton)
      \item Pair production induced by circularly polarized gamma beam (class nameG4PolarizedGammaConversion)
      \item Photo-electric effect induced by circularly polarized gamma beam (class nameG4PolarizedPhotoElectricEffect)
      \item Bremsstrahlung of polarized electrons and positrons (class name G4ePolarizedBremsstrahlung)
      \item Ionisation of polarized electron and positron beam (class name G4ePolarizedIonisation)
      \item Annihilation of polarized positrons (class name G4eplusPolarizedAnnihilation)
    \end{itemize}
\item X射线和带电粒子产生的光质子物理过程的模拟
    \begin{itemize}
      \item Synchrotron radiation (class name G4SynchrotronRadiation)
      \item Transition radiation (class name G4TransitionRadiation)
      \item Cerenkov radiation (class name G4Cerenkov)
      \item Scintillations (class name G4Scintillation)
    \end{itemize}
\item 上述描述的使用物理模型类的过程，这些过程应用可能依据粒子的能量范围有所重合。在不同的模型下改变能量范围是有效的，为了适应其他特定的模型到粒子类型，能量范围，和G4Region。下列的替代模型在标准电磁场次级库下是可用：
    \begin{itemize}
      \item Ionisation in thin absorbers (class name G4PAIModel)
      \item Ionisation in thin absorbers (class name G4PAIPhotModel)
      \item Ionisation in low-density media (class name G4BraggIonGasModel)
      \item Ionisation in low-density media (class name G4BetheBlochIonGasModel)
      \item Multiple scattering (class name G4UrbanMscModel)
      \item Multiple scattering (class name G4GoudsmitSaundersonMscModel)
      \item Multiple scattering (class name G4WentzelVIModel)
      \item Multiple scattering (class name G4LowEWentzelVIModel)
      \item Single scattering (class name G4eCoulombScatteringModel)
      \item Single scattering (class name G4eSingleCoulombScatteringModel)
      \item Single scattering (class name G4IonCoulombScatteringModel)
    \end{itemize}
\end{itemize}
推荐使用物理容器类来提供参考物理列表（在GEANT4的发布版本的source/physics\_lists/constructors/electromagnetic子目录）
\begin{itemize}
  \item 默认的电磁物理过程，对于所有的例子，通过G4WentzelVIModel和G4eCoulombScatteringModel的结合，以单步限制中的“UseSagety”类型来模拟多次散射，对于小于100MeV的e+-使用G4UrbanMscModel模拟，G4LivermorePhotoElectricModel被用来模拟光电效应，在1MeV以下，有瑞丽散射过程发生。物理过程列表是基于100eV到100TeV，物理过程列表是7位每能量递减（类名称G4EmStandardPhysics）。
  \item 光学EM物理过程提供快速但是精度略低的电子输运过程，这个过程基于“Simple”的多次散射单步限制方法，通过电离过程减少单步限制，此状态下瑞丽散射失效，光电效应使用G4PEEffectFluoModel模型，并且“ApplyCuts”选项生效（类名称G4EmStandardPhysics\_option1）。
  \item 光学EM物理过程提供快速但是精度略低的电子输运过程，这个过程基于“简单”的多次散射单步限制方法，通过电离过程减少单步限制，对于认韧致射G4Generator2BS角度产生器，瑞丽散射失效，光电效应使用G4PEEffectFluoModel（类名称G4EmStandardPhysics\_option2）
  \item 高精度的EM物理过程的模拟基于“UseDistanceToBoundary”多次散射单步限制与所有带电例子使用G4UrbanMscModel，这减少了没中类别的例子的步长宫娥能的finalRange参数，另外一个模型G4KleinNishinaModel适用于康普顿散射，荧光作用生效，原子核停止生效，对于认韧致射G4Generator2BS角度产生器，对于粒子电离作用的G4IonParameterisedLossModel，物理过程列表是20位每能量递减，最低10eV低能限制（类名称 G4EmStandardPhysics\_option3）
  \item 结合了包含单步限制的以“UseSagteyPlus”类型的多次散射高精度EM物理过程，对于所有粒子，通过结合G4WentzelVIModel和G4eCoulombScatteringModel，对于能量小于100MeV的e+-使用G4GoudsmitSaundersonMscModel，RangeFactor = 0.02, Scin = 3，（无误差的步长接近体积边界），降低每种粒子类型步长函数优化的finalRange参数，荧光过程生效，核停止生效，电离模型的精确角度产生器生效，20MeV下使用的G4LowEPComptonModel，1GeV以下使用G4PenelopeGammaConversionModel，对于电子或真电子低于20MeV以下使用G4LowEPComptonModel，低于100keV以下使用G4PenelopeIonisationModel，粒子电离使用G4IonParameterisedLossModel，韧致辐射使用G4Generator2BS角度产生器，物理过程列表是20位每能量递减，（类名称 G4EmStandardPhysics\_option4）
  \item 基于Livermore（利物摩尔）模型的数据库，如电子和伽马射线，瑞丽散射生效，荧光过程生效，核停止生效，电离模型的精确角度产生器生效，粒子电离模型G4IonParameterisedLossModel生效，物理过程列表是20位每能量递减，（类名称G4EmLivermorePhysics）
  \item 极化线性伽马模拟模型基于Livermore（利物摩尔）数据库，如电子和伽马射线（G4EmLivermorePolarizedPhysics）
  \item 基于Livermore（利物摩尔）数据库的模型和康普顿散射的新模型G4LowEPComptonModel，多次散射的新低能模型G4LowEWenzelMscModel（G4EmLowEPPhysics）
  \item Penelope2008模型对于电子，正电子和伽马射线，瑞丽散射生效，荧光过程生效，核停止生效，电离模型精确角度产生器生效，粒子电离使用G4IonParameterisedLossModel，物理过程列表是20位每能量递减，（G4EmPenelopePhysics）
  \item 对于100MeV以下的e+-的多次散射的实验物理，通过G4GoudsmitSaundersonMscModel模拟，并在默认的EM物理过程的顶端执行（G4EmStandardPhysicsGS）
  \item 对于100MeV一下的e+-的多次散射的实验物理，通过结合了G4WentzelVIModel和G4eCoulombScatteringModel的模型，并在默认的EM物理过程的顶端执行（G4EmStandardPhysicsGS）
  \item 以单次散射模型替代多次散射模型的实验物理在默认的EM物理过程的顶端执行，对于所有的轻子和强子，使用G4eCoulombScatteringModel模型；对于粒子，使用G4IonCoulombScatteringModel (G4EmStandardPhysicsSS)
  \item 低能的GEANT4-DNA物理（G4EmDNAPhysics）
  \item 可替换的低能GEANT4-DNA物理构建器（G4EmDNAPhysics \_optionX，X可以从1到7），参考GEANT4-DNA章节。
\end{itemize}

在basic，extended和advanced的例程中有注册这三个物理构建器与构建可以更替的结合选项的例子，这些例子可以在examples/basic,example/extend/electromagnetic,examples/medical,example/advanced,和GEANT4的源程序发布版中找到。

一些\textbf{可选项}可以控制电磁过程，这些可选项可能会通过UI命令或者新的C++交互类G4EmParameters调用。G4EmParameters::Instance()是线程安全的交互，EM参数可以运行在不同线程内，在所有的EM过程间可以分配参数。GEANT4中的G4State \_PreInit 或者 G4State \_Idle 的状态参数可以被修改。注：对于定义EM物理过程的配置，其中的一些EM物理过捡起以默认的配置示例。所以，只能在后面的过程应用修改的参数，这个类有下列公共的方法：

\begin{itemize}
    \item StreamInfo(std::ostream\&)
    \item SetDefaults()
    \item SetLossFluctuations(G4bool)
    \item SetBuildCSDARange(G4bool)
    \item SetLPM(G4bool)
    \item SetSpline(G4bool)
    \item SetUseCutAsFinalRange(G4bool)
    \item SetApplyCuts(G4bool)
    \item SetFluo(G4bool val)
    \item SetBeardenFluoDir(G4bool val)
    \item SetAuger(G4bool val)
    \item SetAugerCascade(G4bool val)
    \item SetPixe(G4bool val)
    \item SetDeexcitationIgnoreCut(G4bool val)
    \item SetLateralDisplacement(G4bool val)
    \item SetLateralDisplacementAlg96(G4bool val)
    \item SetMuHadLateralDisplacement(G4bool val)
    \item SetLatDisplacementBeyondBoundary(G4bool val)
    \item ActivateAngularGeneratorForIonisation(G4bool val)
    \item SetUseMottCorrection(G4bool val)
    \item SetIntegral(G4bool val)
    \item SetBirksActive(G4bool val)
    \item SetDNAFast(G4bool val)
    \item SetDNAStationary(G4bool val)
    \item SetDNAElectronMsc(G4bool val)
    \item SetEmSaturation(G4EmSaturation*)
    \item SetMinSubRange(G4double)
    \item SetMinEnergy(G4double)
    \item SetMaxEnergy(G4double)
    \item SetMaxEnergyForCSDARange(G4double)
    \item SetLowestEnergy(G4double)
    \item SetLowestMuHadEnergy(G4double)
    \item SetLowestTripletEnergy(G4double)
    \item SetLinearLossLimit(G4double)
    \item SetBremsstrahlungTh(G4double)
    \item SetLambdaFactor(G4double)
    \item SetFactorForAngleLimit(G4double)
    \item SetMscThetaLimit(G4double)
    \item SetMscRangeFactor(G4double)
    \item SetMscMuHadRangeFactor(G4double)
    \item SetMscGeomFactor(G4double)
    \item SetMscSkin(G4double)
    \item SetScreeningFactor(G4double)
    \item SetStepFunction(G4double, G4double)
    \item SetStepFunctionMuHad(G4double, G4double)
    \item SetNumberOfBins(G4int)
    \item SetNumberOfBinsPerDecade(G4int)
    \item SetVerbose(G4int)
    \item SetWorkerVerbose(G4int)
    \item SetMscStepLimitType(G4MscStepLimitType val)
    \item SetMscMuHadStepLimitType(G4MscStepLimitType val)
    \item SetNuclearFormFactorType(G4NuclearFormFactorType val)
    \item SetPIXECrossSectionModel(const G4String\&)
    \item SetPIXEElectronCrossSectionModel(const G4String\&)
    \item AddPAIModel(const G4String\& particle, const G4String\& region, const G4String\& type)
    \item AddMicroElecModel(const G4String\& region)
    \item AddDNA(const G4String\& region, const G4String\& type)
    \item AddMsc(const G4String\& region, const G4String\& physics\_type)
    \item AddPhysics(const G4String\& region, const G4String\& physics\_type)
    \item SetSubCutoff(G4bool, const G4String\& region)
    \item SetDeexActiveRegion(const G4String\& region, G4bool, G4bool, G4bool)
    \item SetProcessBiasingFactor(const G4String\& process, G4double, G4bool)
    \item ActivateForcedInteraction(const G4String\& process, const G4String\& region, G4double, G4bool)
    \item ActivateSecondaryBiasing(const G4String\& process, const G4String\& region, G4double, G4double)
\end{itemize}

以前的交互类 G4EmProcessOptions仍然是有效的，但是，还是强烈建议用户不要使用以前的交互类G4EmProcessOptions。这个交互类将在下一个主的发行版本的去掉。

对应的UI命名可以链接到UI的次级牡蛎"/process/eLoss"，"/prcess/em"，和"/process/msc"。下列允许通过多次散射的单步限制的类型：

\begin{itemize}
  \item fSimple-简化单步限制（使用物理列表 \_EMV和\_EMX）
  \item fUseSafety-默认
  \item fUseDistanceToBounbary-在EM的例子中，单步限制的高级方法，需要的参数shin>0，应该被用在没有磁场的设置应用里。
  \item fUseSafePlus-高级的方法可以银行用在磁场野。
\end{itemize}

G4EmCalculator 是一个类，这个类提供一个界面与阻止力的接口。这个类在提供已经初始化（G4State\_Idle）物理列表后的用户代码的任何地方使用，G4EmCaculator 已经“获取”很多可以应用到已经建立到物理列表中材料的方法，同时“计算”的方法可以被应用到定义在应用或者当前的GEANT4内部数据库的材料。这些类的公共方法是：

\begin{itemize}
\item GetDEDX(kinEnergy,particle,material,G4Region region=0)
\item GetRangeFromRestrictedDEDX(kinEnergy,particle,material,G4Region* region=0)
\item GetCSDARange(kinEnergy,particle,material,G4Region* region=0)
\item GetRange(kinEnergy,particle,material,G4Region* region=0)
\item GetKinEnergy(range,particle,material,G4Region* region=0)
\item GetCrossSectionPerVolume(kinEnergy,particle,material,G4Region* region=0)
\item GetShellIonisationCrossSectionPerAtom(particle,Z,shell,kinEnergy)
\item GetMeanFreePath(kinEnergy,particle,material,G4Region* region=0)
\item PrintDEDXTable(particle)
\item PrintRangeTable(particle)
\item PrintInverseRangeTable(particle)
\item ComputeDEDX(kinEnergy,particle,process,material,cut=DBL\_MAX)
\item ComputeElectronicDEDX(kinEnergy,particle,material,cut=DBL\_MAX)
\item ComputeNuclearDEDX(kinEnergy,particle,material,cut=DBL\_MAX)
\item ComputeTotalDEDX(kinEnergy,particle,material,cut=DBL\_MAX)
\item ComputeCrossSectionPerVolume(kinEnergy,particle,process,material,cut=0)
\item ComputeCrossSectionPerAtom(kinEnergy,particle,process,Z,A,cut=0)
\item ComputeGammaAttenuationLength(kinEnergy,material)
\item ComputeShellIonisationCrossSectionPerAtom(particle,Z,shell,kinEnergy)
\item ComputeMeanFreePath(kinEnergy,particle,process,material,cut=0)
\item ComputeEnergyCutFromRangeCut(range,particle,material)
\item FindParticle(const G4String\&)
\item FindIon(G4int Z, G4int A)
\item FindMaterial(const G4String\&)
\item FindRegion(const G4String\&)
\item FindCouple(const G4Material*, const G4Region* region=0)
\item SetVerbose(G4int)
\end{itemize}

这些交互类，例子，材料，或者过程可能以他们的指针或者字符可能是它们的名字。

\subsubsection{低能电磁库}
物理的相互作用可以通过以一个可执行物理模型的类，模型类来描述。下述是在GEANT4中可以运行的低能电磁物理模型的总结。有关进一步更详细的信息，请参照GEANT4低能电磁物理工作组的网页，可以从GEANT4网站上转到，“我们是睡”章节，然后选择“工作组”。

这些模型的物理内容以文件形式写在\href{http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/PhysicsReferenceManual/html/PhysicsReferenceManual.html}{ Physics Reference Manual}内。这些模型是基于Livermore数据库，和ICRU73号数据表或者Penelope2008 Monte Carlo程序。他们采用与“标准”GEANT4电磁模型同样的软件设计。

注册低能电磁模型的物理构建器的例子在extended examples内（在GEANT4的源程序发行版中的examples/extended/electromagnetic 和examples/extended/medical），Advanced examples (在GEANT4的源程序发行版中的examples/advanced)描述了这些过程的实例。上述两者皆作为GEANT4发行版的一部分。

\subsubsection{产物截断}
切记：次级产物的界面与范围界面一样特殊，对于次级伽马，电子，正电子，强子产物，它可以在初始化时间转换到能量阈值。对与所有的反冲粒子，强子截断值可以通过弹性散射应用。

GEANT4参考物理列表中，范围截断值值默认设置为0.7mm。这个值在用户物理列表或者UI命令行中指定可选的SetCut()方法的值。例如，设置截断值到10毫米，可以通过使用：

\begin{lstlisting}[numbers=none]
/run/setCut 0.01 mm
\end{lstlisting}

或者，可以指定粒子类型的截断值值：
\begin{lstlisting}[numbers=none]
/run/setCutForAGivenParticle e- 0.01 mm
\end{lstlisting}

如果指定一个能量低于990eV的范围截断值，能量截断值仍然设置为990eV。为了降低这个值（例如，降低到250eV，为了模拟低能发射线的荧光谱），可以在使用“/run/initialize”命令之前使用如下的UI命令：

\begin{lstlisting}[numbers=none]
/cuts/setLowEdge 250 eV
\end{lstlisting}

或者用替代方法，直接在物理用户物理列表中指定，例如，在可选的SetCuts()方法中，使用：
\begin{lstlisting}[numbers=none]
G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(250 * eV, 1 * GeV);
\end{lstlisting}

可以通过一个有效的命令来使对于荧光或者角度电子产物的使用失效：
\begin{lstlisting}
/process/em/deexcitationIgnoreCut true
\end{lstlisting}

\subsubsection{角度产生器}
对于EM的部分过程，可以将次级能量与方向的输出抽样因子化。使用基于SetAngularDistribution(G4VEmAngularDistribution * ) 的交互类G4VEmModel可以代替模型中默认的角度产生器。在标准的低能次级包内，角度产生器依据如下相同的简单交互类。

对于光电模型，可以使用如下几个角度产生器：
\begin{itemize}
  \item G4SauterGavrilaAngularDistribution (默认);
  \item G4PhotoElectricAngularGeneratorSauterGavrila;
  \item G4PhotoElectricAngularGeneratorPolarized
\end{itemize}

对于韧致辐射模型，可以使用如下几个角度产生器：
\begin{itemize}
    \item G4DipBustGenerator (默认);
    \item G4ModifiedTsai;
    \item G4Generator2BS;
    \item G4Generator2BN;
    \item G4PenelopeBremsstrahlungAngular.
\end{itemize}

对于电离模型，可以使用一个新的角度产生器：
\begin{itemize}
  \item G4DeltaAngle
\end{itemize}

\subsubsection{电磁次级偏移}
在相互作用中新建超过一个次级反应是有意义的。例如，电子碰撞在医用直线加速器的靶上，通过韧致辐射产生光子。韧致辐射发射方向的方差减小技巧包括从期望的方向选择N个光子，并且分配每一个光子1/N的比重。

同样的，如此次级反应是不重要的，用户可以通过减少1/N的存在可能性来禁止次级反应。存在的比重通过设置因子N来增加。这个源自俄罗斯轮盘概率模型。

就轫致辐射发射粒子，或者上述1，或者俄罗斯轮盘概率模型而言，如果结果产生的子代粒子的比重低于1/N，偏移技术可以被应用。

通过宏命令，这些技术可以在GEANT4电磁反应中应用

\begin{lstlisting}[numbers=none]
/process/em/setSecBiasing processName Region factor energyLimit energyUnit
\end{lstlisting}

注：processName是需要应用偏移的物理过程；Region是需要应用偏移的区域；factor是韧致辐射发射因子或者俄罗斯轮盘因子（1/N）的倒数；energyLimit energyUnit 是最高能量的限制值。如果第一个次级反应的能量高于这个限值，将不会有偏移被应用。

例如，
\begin{lstlisting}[numbers=none]
/process/em/setSecBiasing eBrem target 10 100 MeV
\end{lstlisting}

将会导致电子在靶区域经历10次的韧致反应（如果第一个光子取样的能量少于100MeV）

偏移需要对于每个物理过程单独指定。为了从光子的反应到子代电子应用俄罗斯轮盘模型，可以对 phot, compt, conv过程使用宏命令。

参考文献：BEAMnrc Users Manual, D.W.O Rogers, B. Walters, I. Kawrakow. NRCC Report PIRS-0509(A)revL,
可以在此网站上查询\href{http://www.irs.inms.nrc.ca/inms/irs/BEAM/beamhome.html}{http://www.irs.inms.nrc.ca/inms/irs/BEAM/beamhome.html} 

\subsubsection{基于利弗莫尔数据库模型}
\begin{itemize}
  \item 光子模型
        \begin{itemize}
            \item Photo-electric effect (class G4LivermorePhotoElectricModel)
            \item Polarized Photo-electric effect (class G4LivermorePolarizedPhotoElectricModel)
            \item Compton scattering (class G4LivermoreComptonModel)
            \item Compton scattering (class G4LowEPComptonModel)
            \item Polarized Compton scattering (class G4LivermorePolarizedComptonModel)– Rayleigh scattering (class G4LivermoreRayleighModel)
            \item Polarized Rayleigh scattering (class G4LivermorePolarizedRayleighModel)
            \item Gamma conversion (also called pair production, class G4LivermoreGammaConversionModel)
            \item Nuclear gamma conversion (class G4LivermoreNuclearGammaConversionModel)
            \item Radiative correction for pair production (class G4LivermoreGammaConversionModelRC)
            \item Polarized gamma conversion (class G4LivermorePolarizedGammaConversionModel)
        \end{itemize}
   \item 电子模型
        \begin{itemize}
          \item Bremsstrahlung (class G4LivermoreBremsstrahlungModel)
          \item Ionisation and delta ray production (class G4LivermoreIonisationModel)
        \end{itemize}
\end{itemize}

\subsubsection{基于ICRU73电离模型}
电离和delta射线产生（类G4IonParametrisedLossModel）














